home *** CD-ROM | disk | FTP | other *** search
/ Moving Pixels Collection / Moving Pixels Collection.iso / st / chamber / source / brk3.s < prev    next >
Text File  |  1995-01-01  |  59KB  |  2,053 lines

  1.  
  2. sup:    clr.l   -(sp)
  3.         move.w  #$20,-(sp)
  4.         trap    #1
  5.         addq.l  #6,sp
  6.     move.w    #0,-(sp)    ;set to low res
  7.     move.l    #-1,-(sp)
  8.     move.l    #-1,-(sp)
  9.     move.w    #5,-(sp)
  10.     trap    #14
  11.     add.l    #12,sp
  12.     move.w  #-1,ynflg       
  13.     move.w    #-1,bynflg
  14.     move.w    #-1,outflg
  15.     move.w    #-1,gynflg
  16.     move.w    #150,ghostx
  17.     move.w    #20,ghosty
  18.     move.w    #24,bally
  19.     move.w    #149,ballx
  20.     move.b    #0,$484        ;turn key click and repeat off
  21.     move.w    #0,nbrks
  22.     move.w    #0,nrem
  23.     move.w    #-1,current
  24.     move.w    #1,plev
  25.     move.w    #0,score
  26.     move.w    #9,bound
  27.     move.w    #-1,brick
  28.     move.w    #-1,brtimes
  29.     move.w    #3,xvel
  30.     move.w    #0,lev
  31.     move.w    #0,count
  32.     move.w    #10,pdelay
  33.     move.w    #0,yvel
  34.     move.w    #150,bbx
  35.     move.w    #97,bby
  36.     move.l    #$ffffc00,kkk
  37.     jsr    mousof
  38.         jsr     getscrn
  39.     move.l    screen,d1
  40.     addi.l    #$8000,d1
  41.         move.l  d1,batadd
  42.         move.l  d1,tempad
  43.     move.l    d1,ballad
  44.     move.l    d1,ghostad
  45.     move.l    d1,safe
  46.     move.w    #-1,fast
  47.     jsr    linea    
  48.     jsr    colors
  49. *    jsr    loadscr
  50. *    jsr    loadtit
  51.     jsr     clearsc
  52.     move.l    #screen3,which    ;title screen in screen3
  53.     jsr    copysc
  54.     lea    ball,a0
  55.     jsr    putvbl
  56.     move.w    #2,xvel
  57.     move.w    #2,yvel
  58.     jsr    putrout
  59.     jsr    wait
  60.     move.w    #0,xvel
  61.     move.w    #0,yvel
  62.     jsr    testd
  63.     move.w    #0,$452
  64.     move.w    #-1,bynflg
  65.     move.l    #screen2,which    ;main screen in screen2
  66.     jsr    copysc    
  67.     jsr    putfirst
  68.     jsr    prtbnd
  69.     jsr    prtlev
  70.     lea     putsp,a0
  71.     jsr     putvbl
  72. *    jsr    putrout
  73.     lea    prtscr,a0
  74.     jsr    putvbl
  75.     lea    zball,a0
  76.     jsr    putvbl
  77.     lea    ghost,a0
  78.     jsr    putvbl
  79.     move.w    #1,$452
  80.     move.w    #178,bally
  81. *    jsr     colors
  82. start:    jsr    wait2
  83.     jsr    testd
  84. tst:
  85. *    jsr    testd
  86.     jsr    fin
  87.     jsr    ballout
  88.     jsr    quick
  89.     jsr    stick
  90. *    jsr    pause
  91.         jmp     tst
  92.  
  93. testd:    move.w    #24000,d5
  94. td:    nop
  95.     dbf    d5,td
  96.     rts
  97.  
  98. *********************pause and jump***************
  99. pause:    clr.l    d0
  100.     move.l    kkk,a1
  101.     move.b    (a1),d0
  102.     btst    #7,d0
  103.     bne    pausehome
  104.     move.b    2(a1),d0
  105.     btst    #7,d0
  106.     bne    pausehome
  107.     cmpi.b    #127,d0
  108.     bgt    pausehome
  109.     cmpi.b    #1,d0
  110.     bne    pausehome
  111.     move.w    #0,$452
  112. pa1:    clr.l    d0
  113.     move.b    (a1),d0
  114.     btst    #7,d0
  115.     bne    pa1
  116.     move.b    2(a1),d0
  117.     btst    #7,d0
  118.     bne    pa1
  119.     cmpi.b    #127,d0
  120.     bgt    pa1
  121.     cmpi.b    #114,d0
  122.     beq    jumplev
  123.     move.w    #1,$452
  124.     rts
  125.  
  126. jumplev:rts
  127.  
  128.  
  129. pausehome:
  130.     rts
  131. ********************vbi to pulse red**************
  132. pulse:
  133.     subq.w    #1,pdelay
  134.     bge    pback
  135.     clr.l    d0
  136.     move.w    count,d0
  137.     lea    redcol,a1
  138.     move.w    (a1,d0),$ff8258
  139.     cmpi.w    #24,count
  140.     blt    pback2
  141.     move.w    #0,count
  142.     move.w    #4,pdelay
  143.     rts
  144. pback2:    addq.w    #2,count
  145.     move.w    #4,pdelay
  146.     rts    
  147. pback:
  148.     rts
  149.  
  150. *********************stick to bat*******************
  151. stick:    move.w    catches,d0
  152.     tst.w    d0
  153.     bmi    sthome
  154.     cmpi.w    #175,bally
  155.     ble    sthome
  156.     move.w    mx,d0
  157.     cmp.w    ballx,d0
  158.     bgt    sthome
  159.     addi.w    #32,d0
  160.     cmp.w    ballx,d0
  161.     blt    sthome    
  162.     cmpi.w    #2,buttondat
  163.     bne    sthome
  164. st:    cmpi.w    #2,buttondat
  165.     bne    sthome2
  166.     move.w    #0,xvel
  167.     move.w    #0,yvel
  168.     move.w    mx,d0
  169.     addi.w    #12,d0
  170.     move.w    d0,ballx
  171.     bra    st
  172. sthome2:move.w    #2,xvel
  173.     move.w    #-2,yvel
  174.     subq.w    #1,catches
  175.     rts
  176. sthome:    rts
  177.  
  178. *********************test if ball should go faster**********
  179. quick:    move.w    buttondat,d1
  180.     cmpi.w    #1,d1
  181.     beq    qhome
  182.     rts
  183. qhome:    move.w    #1,fast
  184.     rts
  185. *************ball out***************
  186. ballout:move.w    outflg,d0
  187.     tst.w    d0
  188.     bmi    outback
  189.     move.w    #0,xvel
  190.     move.w    #0,yvel
  191.     move.w    #178,bally
  192.     move.w    #-1,fast
  193.     jsr    testd
  194.     move.w    #0,$452
  195.     move.l    #boom,-(sp)
  196.     move.w    #32,-(sp)
  197.     trap    #14
  198.     addq.l    #6,sp
  199.     move.w    #13,d0
  200.     move.l    #boomcol,a0
  201.     move.l    #$ff8240,a1
  202. bc:    move.w    (a0)+,(a1)
  203.     jsr    boomdel
  204.     dbf    d0,bc
  205.     subq.w    #1,bound
  206.     move.w    bound,d0
  207.     tst.w    d0
  208.     bmi    playerdead
  209.     jsr    prtbnd
  210.     move.w    #1,$452
  211.     jsr    wait2
  212.     move.w    #-1,outflg
  213. outback:rts
  214. boomdel:move.w    #50000,d5
  215. bd1:    nop
  216.     dbf    d5,bd1
  217.     rts
  218.  
  219. ******************wait two**************
  220. wait2:    move.w    buttondat,d0
  221.     tst.w    d0
  222.     bgt    w2home
  223.     move.w    mx,d0
  224.     addi.w    #12,d0
  225.     move.w    d0,ballx
  226.     bra    wait2
  227. w2home:    move.w    #2,xvel
  228.     move.w    #-2,yvel
  229.     rts
  230.  
  231.  
  232. ****************player dead*******************
  233. playerdead:
  234.         move.w  #-1,ynflg       
  235.     move.w    #-1,bynflg
  236.     move.w    #-1,outflg
  237.     move.w    #-1,gynflg
  238.     move.w    #178,bally
  239.     move.w    #150,ballx
  240.     move.l    safe,ghostad
  241.     move.w    #-1,current
  242.     move.w    #-1,fast
  243.     move.w    #0,nbrks
  244.     move.w    #0,nrem
  245.     move.w    #1,plev
  246.     move.w    #4,bound
  247.     move.w    #-1,brick
  248.     move.w    #-1,brtimes
  249.     move.w    #0,xvel
  250.     move.w    #0,lev
  251.     move.w    #0,yvel
  252.     move.w    #150,bbx
  253.     move.w    #97,bby
  254.     move.l    #screen3,which
  255.     jsr    copysc
  256.     jsr    prtscr
  257.     jsr    wait
  258.     move.l    #screen2,which
  259.     move.w    #0,score
  260.     jsr    copysc
  261.     jsr    prtlev
  262.     jsr    prtbnd
  263.     jsr    putfirst
  264.     move.w    #1,$452
  265.     jsr    wait2
  266.     bra    start
  267. *******************all bricks dead?*************
  268. fin:    move.w    nbrks,d0
  269.     move.w    nrem,d1
  270.     cmp.w    d0,d1
  271.     blt    finback
  272. *    move.w    #-1,gynflg
  273.     move.w    #192,ghosty
  274.     move.w    #0,xvel
  275.     move.w    #0,yvel
  276.     move.w    #178,bally
  277.     addq.w    #1,plev
  278.     jsr    testd
  279.     move.w    #0,$452
  280.     jsr    prtlev
  281.     addq.w    #4,lev
  282.     move.w    #-1,fast
  283.     jsr    putfirst
  284.     move.w    #1,$452
  285.     jsr    wait2
  286.     move.w    #0,nrem
  287.     rts
  288.  
  289. finback:rts
  290.  
  291.  
  292.  
  293. ******************remove a brick******************
  294. rembrick:
  295.     move.w    #-1,brtimes
  296.     addi.w    #2,score
  297.     clr.l    d4
  298.     clr.l    d5
  299.     move.w    bbx,d5
  300.     move.w    bby,d4
  301.     divu    #16,d5
  302.     divu    #8,d4
  303.     mulu    #16,d5        ;x
  304.     mulu    #8,d4        ;y
  305.     move.w    current,d0
  306.     tst.w    d0
  307.     bge    rr1
  308.     clr.l    d0
  309.     move.w    #17,-(sp)
  310.     trap    #14
  311.     addq.l    #2,sp
  312.     asr.l    #8,d0
  313.     cmpi.l    #4500,d0
  314.     bgt    rr1
  315.     move.w    d4,ghosty
  316.     move.w    d5,ghostx
  317.     addi.w    #32,ghosty
  318.     move.w    #1,current
  319. rr1:    mulu    #160,d4
  320.     divu    #16,d5
  321.     mulu    #8,d5
  322.     add.w    d5,d4
  323.     add.l    screen,d4
  324.     move.l    d4,a2
  325. rembr:    move.w  #8,d6        ;copy height to d1
  326.         subq.w  #1,d6        ;height - 1 = height if count starts at zero
  327. rem1:    move.w    #0,d7        ;copy width to d0
  328. rem0:    move.l  #0,(a2)+    ;move all four planes
  329.         move.l  #0,(a2)+    ;(2 longs = 4 words(planes))
  330.         dbf     d7,rem0        ;repeat width times
  331.         add.l   #152,a2        ;move pointer to next line
  332.         dbf     d6,rem1        ;repeat height times
  333. remhome:rts
  334.  
  335.  
  336.  
  337. ******************two hit brick******************
  338. tbrick:    move.w    thbrick,d0
  339.     tst.w    d0
  340.     bmi    thhome
  341.     addi.w    #2,score
  342.     move.w    bbx,d2
  343.     move.w    bby,d1
  344.     divu    #16,d2
  345.     divu    #8,d1
  346.     mulu    #16,d2
  347.     mulu    #8,d1
  348.     mulu    #160,d1
  349.     divu    #16,d2
  350.     mulu    #8,d2
  351.     add.w    d2,d1
  352.     add.l    screen,d1
  353.     move.l    d1,a2
  354.     move.l    d1,bad2
  355.     move.w    #8,brtimes
  356.     move.l    #bricks,a1
  357.     addi.l    #128,a1
  358.     move.l    a1,bad
  359.     move.w    #-1,thbrick
  360. thhome:    rts
  361. *******************brick flash***************
  362.     
  363. bflash:    move.w    brtimes,d5    
  364.     tst.w    d5
  365.     bmi    nearth
  366.     move.w  #8,d6        ;copy height to d1
  367.         subq.w  #1,d6        ;height - 1 = height if count starts at zero
  368.     move.l    bad2,a2    
  369.     move.l    bad,a1
  370. th1:    move.w    #0,d7        ;copy width to d0
  371. th0:    move.l  (a1)+,(a2)+    ;move all four planes
  372.         move.l  (a1)+,(a2)+    ;(2 longs = 4 words(planes))
  373.         dbf     d7,th0        ;repeat width times
  374.         add.l   #152,a2        ;move pointer to next line
  375.         dbf     d6,th1        ;repeat height times
  376.     move.l    a1,bad
  377.     subq.w    #1,d5
  378.     move.w    d5,brtimes
  379.     tst.w    d5
  380.     bmi    nearth
  381.     rts
  382. nearth:    rts
  383.  
  384.  
  385.  
  386.  
  387. ************************put the first bricks****************
  388. putfirst:
  389.     move.w    #5,catches
  390.     move.l    #pattern,a0    
  391.     clr.l    d0
  392.     move.w    lev,d0
  393.     move.l    (a0,d0),a1    ;gives addr of pattern data
  394. pf1:    move.w    (a1)+,$ff825a    ;colors of bricks
  395.     move.w    (a1)+,$ff825c
  396.     move.w    (a1)+,d0    ;number of bricks in pattern
  397.     move.w    d0,nbrks
  398.     addq.w    #1,nbrks
  399.     move.w    (a1)+,a6
  400. pf2:    movem.l    d0-d7/a0-a6,-(a7)
  401.     move.l    #hitbat,-(sp)
  402.     move.w    #32,-(sp)
  403.     trap    #14
  404.     addq.l    #6,sp    
  405.     movem.l    (a7)+,d0-d7/a0-a6
  406.     move.w    (a1)+,d1    ;first brick
  407.     mulu    #2,d1        
  408.     move.l    #adds,a0    ;screen addresses
  409.     move.w    (a0,d1),a2    ;address of brick
  410.     add.l    screen,a2
  411.  
  412. fillbr:    move.w  #8,d6        ;copy height to d1
  413.         subq.w  #1,d6        ;height - 1 = height if count starts at zero
  414.         move.l    #bricks,a0    ;shifted sprite address
  415.     adda.l    a6,a0
  416.  
  417. fill1:    move.w    #0,d7        ;copy width to d0
  418. fill0:    move.l  (a0)+,(a2)+    ;move all four planes
  419.         move.l  (a0)+,(a2)+    ;(2 longs = 4 words(planes))
  420.         dbf     d7,fill0    ;repeat width times
  421.         add.l   #152,a2        ;move pointer to next line
  422.         dbf     d6,fill1    ;repeat height times
  423.     jsr    testd
  424.     dbf    d0,pf2
  425.     rts    
  426.     
  427.  
  428. ***************************************
  429. ball:
  430.     jsr    pulse
  431.     jsr    bflash
  432.     move.w    xvel,d0
  433.     move.w    yvel,d1
  434.     add.w    d1,bally
  435.     add.w    d0,ballx
  436.     move.w    bally,d2
  437.     cmpi.w    #190,d2
  438.     bge    bllout
  439.         move.w  ballx,block
  440.         move.w  bally,block+2
  441.         move.w  #$7,block+4
  442.         move.w  #$1,block+6
  443.         move.l  #ballsp,block+8
  444.         move.l  #balltemp,block+12
  445.         move.l  screen,block+16
  446.         move.w  #$1,block+26
  447.         move.l  ballad,block+30
  448.     move.l    #ballad,block+34
  449.     move.w    bynflg,d0
  450.     tst.w    d0
  451.     bmi    cbalc
  452. cblr1:    move.w  block+4,d1        ;copy height to d1
  453.     subq.w  #1,d1           ;height - 1 = height if count starts at zero
  454.         move.l  block+12,a0      ;shifted sprite address
  455. cblr2:    move.w  block+6,d0        ;copy width to d0
  456.         move.l  block+30,a1       ;absolute screen address to a1
  457.         move.l  block+30,d6
  458. cblr3:    move.l  (a0)+,d3        ;move all four planes
  459.         eor.l   d3,(a1)+
  460.         move.l  (a0)+,d3        ;(2 longs = 4 words(planes))
  461.         eor.l   d3,(a1)+
  462.         dbf     d0,cblr3         ;repeat width times
  463.         add.l   #160,block+30     ;move pointer to next line
  464.         dbf     d1,cblr2         ;repeat height times
  465.         move.l  d6,block+30
  466. cba:    move.l    ptsin,a6
  467.     move.w    xvel,d0
  468.     move.w    yvel,d1
  469.     move.w    ballx,(a6)
  470.     move.w    bally,2(a6)
  471.     add.w    d0,(a6)
  472.     add.w    d1,2(a6)
  473.     addq.w    #2,(a6)
  474.     subq.w    #1,2(a6)
  475.     dc.w    getpix
  476.     tst.w    d0
  477.     ble    c1
  478.     neg    yvel
  479.     jsr    hit
  480. c1:    addq.w    #3,(a6)
  481.     addq.w    #3,2(a6)
  482.     dc.w    getpix
  483.     tst.w    d0
  484.     ble    c2
  485.     neg    xvel
  486.     jsr    hit
  487. c2:    addq.w    #3,2(a6)
  488.     subq.w    #3,(a6)
  489.     dc.w    getpix
  490.     tst.w    d0
  491.     ble    c3
  492.     neg    yvel
  493.     jsr    hit
  494. c3:    subq.w    #3,(a6)
  495.     subq.w    #3,2(a6)
  496.     dc.w    getpix
  497.     tst.w    d0
  498.     ble    cbalc
  499.     neg    xvel
  500.     jsr    hit
  501.     bra    cbalc
  502. hit:    cmpi.w    #2,d0        ;hit a two hit brick
  503.     bne    hit1
  504.     move.w    (a6),bbx
  505.     move.w    2(a6),bby
  506.     move.w    #1,thbrick
  507.     move.l    #hitbr2,-(sp)
  508.     move.w    #32,-(sp)
  509.     trap    #14
  510.     jsr    tbrick
  511.     addq.l    #6,sp
  512.     rts
  513. hit1:    cmpi.w    #13,d0        ;hit a normal brick
  514.     blt    hit2
  515.     move.w    (a6),bbx
  516.     move.w    2(a6),bby
  517.     move.l    #hitbr,-(sp)
  518.     move.w    #32,-(sp)
  519.     trap    #14
  520.     addq.l    #6,sp
  521.     addq.w    #1,nrem
  522.     jsr    rembrick
  523.     rts
  524. hit2:    cmpi.w    #12,d0        ;hit red bat
  525.     bne    hit3
  526.     move.l    #hitbat,-(sp)
  527.     move.w    #32,-(sp)
  528.     trap    #14
  529.     addq.l    #6,sp
  530.     move.w    xvel,d1
  531.     tst.w    d1
  532.     bmi    hitneg
  533.     move.w    #4,xvel
  534.     rts
  535. hitneg:    move.w    #-4,xvel
  536.     rts
  537. hit3:    cmpi.w    #11,d0
  538.     bne    hit4
  539.     move.l    #hitbat,-(sp)
  540.     move.w    #32,-(sp)
  541.     trap    #14
  542.     addq.l    #6,sp
  543.     move.w    xvel,d1
  544.     tst.w    d1
  545.     bmi    hitneg2
  546.     move.w    #2,xvel
  547.     rts
  548. hitneg2:move.w    #-2,xvel
  549.     rts
  550. hit4:    move.l    #hitbat,-(sp)
  551.     move.w    #32,-(sp)
  552.     trap    #14
  553.     addq.l    #6,sp
  554.     rts
  555.  
  556.  
  557. cbalc:    move.w    #1,bynflg
  558.     clr.l   d0
  559.         move.w  block,d0       ;put x value in d0
  560.         divu    #16,d0          ;divide by 16 leaves word boundry in d0
  561.         move.w  block+2,d1     ;put y value in d1
  562.         mulu    #160,d1         ;gives offset in words of line
  563.         move.w  d0,d3
  564.         mulu    #8,d3
  565.         add     d3,d1           ;gives word to poke sprite
  566.         move.l  block+16,d2    ;put screen address in d2
  567.         add     d1,d2           ;gives actual screen address for sprite
  568.     move.l    block+34,a0
  569.         move.l  d2,(a0)
  570.         move.l  d2,block+20
  571.         asr.l   #8,d0
  572.         asr.l   #8,d0           ;leaves x offset in d0          
  573.         move.w  d0,block+24
  574.  
  575.  
  576. *************CODE TO ROTATE A SPRITE IMAGE***********************
  577. *       parameters to be passed on the stack in order are       *       
  578. *       1-      x offset from start of word                     *
  579. *       2-      address of place to put shifted image(tempsp)   *
  580. *       3-      address of sprite data                          *
  581. *       4-      height of object in pixels                      *
  582. *       5-      width of object in words - 1                    *
  583. *****************************************************************
  584. bshiftimage:
  585.         move.w  block+4,d1        ;height in d1
  586.         move.w  block+24,d2       ;offset to d2
  587.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  588.         subq.w  #1,block+6        ;width - 1 = width if count starts at zero
  589.         move.l  block+8,a0        ;object pointer to a0
  590.         move.l  block+12,a1       ;image pointer to a1
  591. sbi1:   move.w  block+6,d0        ;width in d0
  592.         clr.l   (a1)            ;for each line, the first word of the
  593.         clr.l   4(a1)           ;image must be cleared
  594. sbi0:   clr.l   d4              ;make sure that the top halves of these
  595.         clr.l   d5              ;registers are zeroed out
  596.         clr.l   d6
  597.         clr.l   d7
  598.         move.w  (a0)+,d4        ;load in one word (four planes)
  599.         move.w  (a0)+,d5        ;to be rotated
  600.         move.w  (a0)+,d6
  601.         move.w  (a0)+,d7
  602.         ror.l   d2,d4           ;rotate all planes by the offset(d2)
  603.         ror.l   d2,d5
  604.         ror.l   d2,d6
  605.         ror.l   d2,d7
  606.         or.w    d4,(a1)+        ;add low order bits to the high order bits
  607.         or.w    d5,(a1)+        ;stored by move instructions farther
  608.         or.w    d6,(a1)+        ;down in this routine
  609.         or.w    d7,(a1)+
  610.         swap    d4              ;move high order bits into lower halves
  611.         swap    d5              ;of the registers
  612.         swap    d6
  613.         swap    d7
  614.         move.w  d4,(a1)         ;save the high orders bits to be ORed
  615.         move.w  d5,2(a1)        ;in the loop (do not increment a1 because
  616.         move.w  d6,4(a1)        ;the ORs in the loop must function on
  617.         move.w  d7,6(a1)        ;the same addresses as these moves.
  618.         dbf     d0,sbi0          ;repeat width times
  619.         addq.l  #8,a1           ;new line, move to next word( * 4 planes = 8)
  620.         dbf     d1,sbi1          ;repeat height times
  621.         addi.w  #1,block+6
  622.  
  623. *********code to put sprite on screen********************
  624. *********parameters to be passed on the stack are********
  625. *********1-     shifted sprite address (tempsp) *********
  626. *********2-     absolute screen address to put image*****
  627. *********3-     height in pixels                *********
  628. *********4-     width in words -1               *********
  629.  
  630. pbotsp:    move.w  block+4,d1     ;copy height to d1
  631.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  632.         move.l  block+12,a0    ;shifted sprite address
  633. rbs1:    move.w block+26,d0     ;copy width to d0
  634.         move.l  block+20,a1    ;absolute screen address to a1
  635.         move.l  block+20,d6
  636. rbs0:    move.l  (a0)+,d2    ;move all four planes
  637.         eor.l   d2,(a1)+
  638.         move.l  (a0)+,d2    ;(2 longs = 4 words(planes))
  639.         eor.l   d2,(a1)+
  640.         dbf     d0,rbs0          ;repeat width times
  641.         add.l   #160,block+20  ;move pointer to next line
  642.         dbf     d1,rbs1          ;repeat height times
  643.         move.l  d6,block+20
  644. bdone:    rts                     ;done
  645.  
  646.  
  647. bllout:move.w    #1,outflg
  648.     rts
  649.  
  650. ***************************************
  651. ghost:    move.w    current,d0
  652.     tst.w    d0
  653.     bmi    gdone    
  654.     addq.w    #2,ghosty
  655.         move.w  ghostx,gblock
  656.         move.w  ghosty,gblock+2
  657.         move.w  #$8,gblock+4
  658.         move.w  #$1,gblock+6
  659.         move.l  #ghostbr,gblock+8
  660.         move.l  #ghosttemp,gblock+12
  661.         move.l  screen,gblock+16
  662.         move.w  #$1,gblock+26
  663.         move.l  ghostad,gblock+30
  664.     move.l    #ghostad,gblock+34
  665.     move.w    gynflg,d0
  666.     tst.w    d0
  667.     bmi    gcalc
  668. gblr1:    move.w  gblock+4,d1        ;copy height to d1
  669.     subq.w  #1,d1           ;height - 1 = height if count starts at zero
  670.         move.l  gblock+12,a0      ;shifted sprite address
  671. gblr2:    move.w  gblock+6,d0        ;copy width to d0
  672.         move.l  gblock+30,a1       ;absolute screen address to a1
  673.         move.l  gblock+30,d6
  674. gblr3:    move.l  (a0)+,d3        ;move all four planes
  675.         eor.l   d3,(a1)+
  676.         move.l  (a0)+,d3        ;(2 longs = 4 words(planes))
  677.         eor.l   d3,(a1)+
  678.         dbf     d0,gblr3         ;repeat width times
  679.         add.l   #160,gblock+30     ;move pointer to next line
  680.         dbf     d1,gblr2         ;repeat height times
  681.         move.l  d6,gblock+30
  682.     move.w    ghosty,d2
  683.     cmpi.w    #190,d2
  684.     bge    ghostout
  685.  
  686. ghit:    move.l    ptsin,a5
  687.     move.w    ghosty,2(a5)
  688.     move.w    ghostx,(a5)
  689.     addi.w    #12,2(a5)
  690.     dc.w    getpix
  691.     cmpi.w    #8,d0
  692.     ble    ghit2
  693.     cmpi.w    #13,d0
  694.     bge    ghit2
  695.     move.w    #-1,current
  696.     move.w    #-1,gynflg
  697.     bra    gout2
  698. ghit2:    addq.w    #4,(a5)
  699.     dc.w    getpix
  700.     cmpi.w    #8,d0
  701.     ble    ghit3
  702.     cmpi.w    #13,d0
  703.     bge    ghit3
  704.     move.w    #-1,current
  705.     move.w    #-1,gynflg
  706.     bra    gout2
  707.     
  708. ghit3:    addq.w    #4,(a5)
  709.     dc.w    getpix
  710.     cmpi.w    #8,d0
  711.     ble    ghit4
  712.     cmpi.w    #13,d0
  713.     bge    ghit4
  714.     move.w    #-1,current
  715.     move.w    #-1,gynflg
  716.     bra    gout2
  717.  
  718. ghit4:    addq.w    #4,(a5)
  719.     dc.w    getpix
  720.     cmpi.w    #8,d0
  721.     ble    gcalc
  722.     cmpi.w    #13,d0
  723.     bge    gcalc
  724.     move.w    #-1,current
  725.     move.w    #-1,gynflg
  726.     bra    gout2
  727.  
  728. gcalc:    move.w    #1,gynflg
  729.     clr.l   d0
  730.         move.w  gblock,d0       ;put x value in d0
  731.         divu    #16,d0          ;divide by 16 leaves word boundry in d0
  732.         move.w  gblock+2,d1     ;put y value in d1
  733.         mulu    #160,d1         ;gives offset in words of line
  734.         move.w  d0,d3
  735.         mulu    #8,d3
  736.         add     d3,d1           ;gives word to poke sprite
  737.         move.l  gblock+16,d2    ;put screen address in d2
  738.         add     d1,d2           ;gives actual screen address for sprite
  739.     move.l    gblock+34,a0
  740.         move.l  d2,(a0)
  741.         move.l  d2,gblock+20
  742.         asr.l   #8,d0
  743.         asr.l   #8,d0           ;leaves x offset in d0          
  744.         move.w  d0,gblock+24
  745.  
  746.  
  747. *************CODE TO ROTATE A SPRITE IMAGE***********************
  748. *       parameters to be passed on the stack in order are       *       
  749. *       1-      x offset from start of word                     *
  750. *       2-      address of place to put shifted image(tempsp)   *
  751. *       3-      address of sprite data                          *
  752. *       4-      height of object in pixels                      *
  753. *       5-      width of object in words - 1                    *
  754. *****************************************************************
  755. gshiftimage:
  756.         move.w  gblock+4,d1        ;height in d1
  757.         move.w  gblock+24,d2       ;offset to d2
  758.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  759.         subq.w  #1,gblock+6        ;width - 1 = width if count starts at zero
  760.         move.l  gblock+8,a0        ;object pointer to a0
  761.         move.l  gblock+12,a1       ;image pointer to a1
  762. gsbi1:   move.w  gblock+6,d0        ;width in d0
  763.         clr.l   (a1)            ;for each line, the first word of the
  764.         clr.l   4(a1)           ;image must be cleared
  765. gsbi0:   clr.l   d4              ;make sure that the top halves of these
  766.         clr.l   d5              ;registers are zeroed out
  767.         clr.l   d6
  768.         clr.l   d7
  769.         move.w  (a0)+,d4        ;load in one word (four planes)
  770.         move.w  (a0)+,d5        ;to be rotated
  771.         move.w  (a0)+,d6
  772.         move.w  (a0)+,d7
  773.         ror.l   d2,d4           ;rotate all planes by the offset(d2)
  774.         ror.l   d2,d5
  775.         ror.l   d2,d6
  776.         ror.l   d2,d7
  777.         or.w    d4,(a1)+        ;add low order bits to the high order bits
  778.         or.w    d5,(a1)+        ;stored by move instructions farther
  779.         or.w    d6,(a1)+        ;down in this routine
  780.         or.w    d7,(a1)+
  781.         swap    d4              ;move high order bits into lower halves
  782.         swap    d5              ;of the registers
  783.         swap    d6
  784.         swap    d7
  785.         move.w  d4,(a1)         ;save the high orders bits to be ORed
  786.         move.w  d5,2(a1)        ;in the loop (do not increment a1 because
  787.         move.w  d6,4(a1)        ;the ORs in the loop must function on
  788.         move.w  d7,6(a1)        ;the same addresses as these moves.
  789.         dbf     d0,gsbi0          ;repeat width times
  790.         addq.l  #8,a1           ;new line, move to next word( * 4 planes = 8)
  791.         dbf     d1,gsbi1          ;repeat height times
  792.         addi.w  #1,gblock+6
  793.  
  794. *********code to put sprite on screen********************
  795. *********parameters to be passed on the stack are********
  796. *********1-     shifted sprite address (tempsp) *********
  797. *********2-     absolute screen address to put image*****
  798. *********3-     height in pixels                *********
  799. *********4-     width in words -1               *********
  800.  
  801. gpotsp:    move.w  gblock+4,d1     ;copy height to d1
  802.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  803.         move.l  gblock+12,a0    ;shifted sprite address
  804. grbs1:    move.w gblock+26,d0     ;copy width to d0
  805.         move.l  gblock+20,a1    ;absolute screen address to a1
  806.         move.l  gblock+20,d6
  807. grbs0:    move.l  (a0)+,d2    ;move all four planes
  808.         eor.l   d2,(a1)+
  809.         move.l  (a0)+,d2    ;(2 longs = 4 words(planes))
  810.         eor.l   d2,(a1)+
  811.         dbf     d0,grbs0          ;repeat width times
  812.         add.l   #160,gblock+20  ;move pointer to next line
  813.         dbf     d1,grbs1          ;repeat height times
  814.         move.l  d6,gblock+20
  815. gdone:    rts                     ;done
  816.  
  817.  
  818. ghostout:
  819.     move.l    safe,ghostad
  820.     move.w    #1,goutflg
  821.     move.w    #-1,current
  822.     rts
  823. gout2:    move.l    safe,ghostad
  824.     addi.w    #25,score
  825.     rts
  826.  
  827.  
  828. ***************************************
  829. zball:    move.w    fast,d0
  830.     tst.w    d0
  831.     bmi    zbdone
  832.     move.w    xvel,d0
  833.     move.w    yvel,d1
  834.     add.w    d1,bally
  835.     add.w    d0,ballx
  836.     move.w    bally,d2
  837.     cmpi.w    #190,d2
  838.     bge    zbllout
  839.         move.w  ballx,block
  840.         move.w  bally,block+2
  841.         move.w  #$7,block+4
  842.         move.w  #$1,block+6
  843.         move.l  #ballsp,block+8
  844.         move.l  #balltemp,block+12
  845.         move.l  screen,block+16
  846.         move.w  #$1,block+26
  847.         move.l  ballad,block+30
  848.     move.l    #ballad,block+34
  849.     move.w    bynflg,d0
  850.     tst.w    d0
  851.     bmi    zcbalc
  852. zcblr1:    move.w  block+4,d1        ;copy height to d1
  853.     subq.w  #1,d1           ;height - 1 = height if count starts at zero
  854.         move.l  block+12,a0      ;shifted sprite address
  855. zcblr2:    move.w  block+6,d0        ;copy width to d0
  856.         move.l  block+30,a1       ;absolute screen address to a1
  857.         move.l  block+30,d6
  858. zcblr3:    move.l  (a0)+,d3        ;move all four planes
  859.         eor.l   d3,(a1)+
  860.         move.l  (a0)+,d3        ;(2 longs = 4 words(planes))
  861.         eor.l   d3,(a1)+
  862.         dbf     d0,zcblr3         ;repeat width times
  863.         add.l   #160,block+30     ;move pointer to next line
  864.         dbf     d1,zcblr2         ;repeat height times
  865.         move.l  d6,block+30
  866.     jsr    bflash
  867. zcba:    move.l    ptsin,a6
  868.     move.w    xvel,d0
  869.     move.w    yvel,d1
  870.     move.w    ballx,(a6)
  871.     move.w    bally,2(a6)
  872.     add.w    d0,(a6)
  873.     add.w    d1,2(a6)
  874.     addq.w    #2,(a6)
  875.     subq.w    #1,2(a6)
  876.     dc.w    getpix
  877.     tst.w    d0
  878.     ble    zc1
  879.     neg    yvel
  880.     jsr    zhit
  881. zc1:    addq.w    #3,(a6)
  882.     addq.w    #3,2(a6)
  883.     dc.w    getpix
  884.     tst.w    d0
  885.     ble    zc2
  886.     neg    xvel
  887.     jsr    zhit
  888. zc2:    addq.w    #3,2(a6)
  889.     subq.w    #3,(a6)
  890.     dc.w    getpix
  891.     tst.w    d0
  892.     ble    zc3
  893.     neg    yvel
  894.     jsr    zhit
  895. zc3:    subq.w    #3,(a6)
  896.     subq.w    #3,2(a6)
  897.     dc.w    getpix
  898.     tst.w    d0
  899.     ble    zcbalc
  900.     neg    xvel
  901.     jsr    zhit
  902.     bra    zcbalc
  903. zhit:    cmpi.w    #2,d0        ;hit a two hit brick
  904.     bne    zhit1
  905.     move.w    (a6),bbx
  906.     move.w    2(a6),bby
  907.     move.w    #1,thbrick
  908.     move.l    #hitbr2,-(sp)
  909.     move.w    #32,-(sp)
  910.     trap    #14
  911.     jsr    tbrick
  912.     addq.l    #6,sp
  913.     rts
  914. zhit1:    cmpi.w    #13,d0        ;hit a normal brick
  915.     blt    zhit2
  916.     move.w    (a6),bbx
  917.     move.w    2(a6),bby
  918.     move.l    #hitbr,-(sp)
  919.     move.w    #32,-(sp)
  920.     trap    #14
  921.     addq.l    #6,sp
  922.     addq.w    #1,nrem
  923.     jsr    rembrick
  924.     rts
  925. zhit2:    cmpi.w    #12,d0
  926.     bne    zhit3
  927.     move.l    #hitbat,-(sp)
  928.     move.w    #32,-(sp)
  929.     trap    #14
  930.     addq.l    #6,sp
  931.     move.w    xvel,d1
  932.     tst.w    d1
  933.     bmi    zhitneg
  934.     move.w    #3,xvel
  935.     rts
  936. zhitneg:move.w    #-3,xvel
  937.     rts
  938. zhit3:    cmpi.w    #11,d0
  939.     bne    zhit4
  940.     move.l    #hitbat,-(sp)
  941.     move.w    #32,-(sp)
  942.     trap    #14
  943.     addq.l    #6,sp
  944.     move.w    xvel,d1
  945.     tst.w    d1
  946.     bmi    zhitneg2
  947.     move.w    #2,xvel
  948.     rts
  949. zhitneg2:move.w    #-2,xvel
  950.     rts
  951. zhit4:    move.l    #hitbat,-(sp)
  952.     move.w    #32,-(sp)
  953.     trap    #14
  954.     addq.l    #6,sp
  955.     rts
  956.  
  957.  
  958. zcbalc:    move.w    #1,bynflg
  959.     clr.l   d0
  960.         move.w  block,d0       ;put x value in d0
  961.         divu    #16,d0          ;divide by 16 leaves word boundry in d0
  962.         move.w  block+2,d1     ;put y value in d1
  963.         mulu    #160,d1         ;gives offset in words of line
  964.         move.w  d0,d3
  965.         mulu    #8,d3
  966.         add     d3,d1           ;gives word to poke sprite
  967.         move.l  block+16,d2    ;put screen address in d2
  968.         add     d1,d2           ;gives actual screen address for sprite
  969.     move.l    block+34,a0
  970.         move.l  d2,(a0)
  971.         move.l  d2,block+20
  972.         asr.l   #8,d0
  973.         asr.l   #8,d0           ;leaves x offset in d0          
  974.         move.w  d0,block+24
  975.  
  976.  
  977. *************CODE TO ROTATE A SPRITE IMAGE***********************
  978. *       parameters to be passed on the stack in order are       *       
  979. *       1-      x offset from start of word                     *
  980. *       2-      address of place to put shifted image(tempsp)   *
  981. *       3-      address of sprite data                          *
  982. *       4-      height of object in pixels                      *
  983. *       5-      width of object in words - 1                    *
  984. *****************************************************************
  985. zbshiftimage:
  986.         move.w  block+4,d1        ;height in d1
  987.         move.w  block+24,d2       ;offset to d2
  988.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  989.         subq.w  #1,block+6        ;width - 1 = width if count starts at zero
  990.         move.l  block+8,a0        ;object pointer to a0
  991.         move.l  block+12,a1       ;image pointer to a1
  992. zsbi1:   move.w  block+6,d0        ;width in d0
  993.         clr.l   (a1)            ;for each line, the first word of the
  994.         clr.l   4(a1)           ;image must be cleared
  995. zsbi0:   clr.l   d4              ;make sure that the top halves of these
  996.         clr.l   d5              ;registers are zeroed out
  997.         clr.l   d6
  998.         clr.l   d7
  999.         move.w  (a0)+,d4        ;load in one word (four planes)
  1000.         move.w  (a0)+,d5        ;to be rotated
  1001.         move.w  (a0)+,d6
  1002.         move.w  (a0)+,d7
  1003.         ror.l   d2,d4           ;rotate all planes by the offset(d2)
  1004.         ror.l   d2,d5
  1005.         ror.l   d2,d6
  1006.         ror.l   d2,d7
  1007.         or.w    d4,(a1)+        ;add low order bits to the high order bits
  1008.         or.w    d5,(a1)+        ;stored by move instructions farther
  1009.         or.w    d6,(a1)+        ;down in this routine
  1010.         or.w    d7,(a1)+
  1011.         swap    d4              ;move high order bits into lower halves
  1012.         swap    d5              ;of the registers
  1013.         swap    d6
  1014.         swap    d7
  1015.         move.w  d4,(a1)         ;save the high orders bits to be ORed
  1016.         move.w  d5,2(a1)        ;in the loop (do not increment a1 because
  1017.         move.w  d6,4(a1)        ;the ORs in the loop must function on
  1018.         move.w  d7,6(a1)        ;the same addresses as these moves.
  1019.         dbf     d0,zsbi0          ;repeat width times
  1020.         addq.l  #8,a1           ;new line, move to next word( * 4 planes = 8)
  1021.         dbf     d1,zsbi1          ;repeat height times
  1022.         addi.w  #1,block+6
  1023.  
  1024. *********code to put sprite on screen********************
  1025. *********parameters to be passed on the stack are********
  1026. *********1-     shifted sprite address (tempsp) *********
  1027. *********2-     absolute screen address to put image*****
  1028. *********3-     height in pixels                *********
  1029. *********4-     width in words -1               *********
  1030.  
  1031. zpbotsp:move.w  block+4,d1     ;copy height to d1
  1032.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  1033.         move.l  block+12,a0    ;shifted sprite address
  1034. zrbs1:    move.w block+26,d0     ;copy width to d0
  1035.         move.l  block+20,a1    ;absolute screen address to a1
  1036.         move.l  block+20,d6
  1037. zrbs0:    move.l  (a0)+,d2    ;move all four planes
  1038.         eor.l   d2,(a1)+
  1039.         move.l  (a0)+,d2    ;(2 longs = 4 words(planes))
  1040.         eor.l   d2,(a1)+
  1041.         dbf     d0,zrbs0          ;repeat width times
  1042.         add.l   #160,block+20  ;move pointer to next line
  1043.         dbf     d1,zrbs1          ;repeat height times
  1044.         move.l  d6,block+20
  1045. zbdone:    rts                     ;done
  1046.  
  1047.  
  1048. zbllout:move.w    #1,outflg
  1049.     rts
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057. ***********************fancy clear screen****************
  1058. clearsc:move.l  #99,d0
  1059.         move.l  screen,a0
  1060. cl1:    move.w  #159,d1
  1061. cl2:    move.w  #0,(a0)+
  1062.         dbf     d1,cl2
  1063.         addi.l  #160,a0
  1064.         jsr     cldel
  1065.         dbf     d0,cl1
  1066.         move.w  #99,d0
  1067.         move.l  screen,a0
  1068.         addi.l  #160,a0
  1069. cl3:    move.w  #159,d1
  1070. cl4:    move.w  #0,(a0)+
  1071.         dbf     d1,cl4
  1072.         addi.l  #160,a0
  1073.         jsr     cldel
  1074.         dbf     d0,cl3
  1075.         rts
  1076.  
  1077.  
  1078. cldel:  move.w  #3000,d2
  1079. cdel1:  nop
  1080.         dbf     d2,cdel1
  1081.         rts
  1082. ********************fancy copy screen*************
  1083. copysc: move.w  #99,d0
  1084.         move.l  screen,a0
  1085.         move.l  which,a1
  1086. cop1:   move.w  #159,d1
  1087. cop2:   move.w  (a1)+,(a0)+
  1088.         dbf     d1,cop2
  1089.         addi.l  #160,a0
  1090.         addi.l  #160,a1
  1091.         jsr     cldel
  1092.         dbf     d0,cop1
  1093.         move.w  #99,d0
  1094.         move.l  screen,a0
  1095.         addi.l  #160,a0
  1096.         move.l  which,a1
  1097.         addi.l  #160,a1
  1098. cop3:   move.w  #159,d1
  1099. cop4:   move.w  (a1)+,(a0)+
  1100.         dbf     d1,cop4
  1101.         addi.l  #160,a0
  1102.         addi.l  #160,a1
  1103.         jsr     cldel
  1104.         dbf     d0,cop3
  1105.         rts
  1106. **********************routine to print a dec nuber*************
  1107. prtlev:
  1108.  
  1109.         move.l  #0,d7
  1110.         move.w  plev,d7
  1111.         andi.l  #$ffff,d7
  1112.         move.l  #line,a5
  1113.  
  1114. dodec:  move.l  d7,d6
  1115.         divu    #10,d6
  1116.         move.w  d6,d7
  1117.         swap    d6
  1118.         addi.w  #16,d6
  1119.         move.b  d6,(a5)+
  1120.         cmpi.w  #0,d7
  1121.         bne     dodec
  1122.  
  1123.         move.l  #pos,-(sp)
  1124.         move.w  #9,-(sp)
  1125.         trap    #1
  1126.         addq.l  #6,sp
  1127.         move.l  #col,-(sp)
  1128.         move.w  #9,-(sp)
  1129.         trap    #1
  1130.         addq.l  #6,sp
  1131.  
  1132. out:    cmpa.l  #line,a5
  1133.         beq     decback
  1134.  
  1135.         move.b  -(a5),d7
  1136.         andi.w  #$ff,d7
  1137.         
  1138.         move.w  d7,-(sp)
  1139.     move.w    #5,-(sp)
  1140.         move.w  #3,-(sp)
  1141.         trap    #13
  1142.         addq.l  #6,sp
  1143.  
  1144.         bra     out
  1145.  
  1146.  
  1147. decback: rts
  1148.  
  1149.  
  1150. ****************print score************
  1151. prtscr:
  1152.     move.l  #0,d7
  1153.         move.w  score,d7
  1154.     andi.l  #$ffff,d7
  1155.         move.l  #line,a5
  1156.  
  1157. sodec:  move.l  d7,d6
  1158.         divu    #10,d6
  1159.         move.w  d6,d7
  1160.         swap    d6
  1161.         addi.w  #16,d6
  1162.         move.b  d6,(a5)+
  1163.         cmpi.w  #0,d7
  1164.         bne     sodec
  1165.  
  1166.         move.l  #spos,-(sp)
  1167.         move.w  #9,-(sp)
  1168.         trap    #1
  1169.         addq.l  #6,sp
  1170.         move.l  #col,-(sp)
  1171.         move.w  #9,-(sp)
  1172.         trap    #1
  1173.         addq.l  #6,sp
  1174.  
  1175. sout:    cmpa.l  #line,a5
  1176.         beq     secback
  1177.  
  1178.         move.b  -(a5),d7
  1179.         andi.w  #$ff,d7
  1180.         
  1181.         move.w  d7,-(sp)
  1182.     move.w    #5,-(sp)
  1183.         move.w  #3,-(sp)
  1184.         trap    #13
  1185.         addq.l  #6,sp
  1186.  
  1187.         bra     sout
  1188. secback:clr.l    d0
  1189.     move.w    score,d0
  1190.     cmpi.l    #65000,d0
  1191.     bgt    ppp
  1192.     rts
  1193. ppp:    move.w  #6,d1     ;copy height to d1
  1194.         move.l  #76,a0    ;shifted sprite address
  1195.     addi.l    screen,a0
  1196. pp1:    move.w    #2,d0
  1197. pp2:    move.l    #0,(a0)+
  1198.     move.l    #0,(a0)+
  1199.     dbf    d0,pp2
  1200.     addi.l    #136,a0
  1201.     dbf    d1,pp1
  1202.  
  1203.     move.w    #0,score
  1204.     rts
  1205.  
  1206. ****************print bounders left************
  1207. prtbnd:    move.l  #0,d7
  1208.         move.w  bound,d7
  1209.         andi.l  #$ffff,d7
  1210.         move.l  #line,a5
  1211.  
  1212. bodec:  move.l  d7,d6
  1213.         divu    #10,d6
  1214.         move.w  d6,d7
  1215.         swap    d6
  1216.         addi.w  #16,d6
  1217.         move.b  d6,(a5)+
  1218.         cmpi.w  #0,d7
  1219.         bne     bodec
  1220.  
  1221.         move.l  #bpos,-(sp)
  1222.         move.w  #9,-(sp)
  1223.         trap    #1
  1224.         addq.l  #6,sp
  1225.         move.l  #col,-(sp)
  1226.         move.w  #9,-(sp)
  1227.         trap    #1
  1228.         addq.l  #6,sp
  1229.  
  1230. bout:    cmpa.l  #line,a5
  1231.         beq     becback
  1232.  
  1233.         move.b  -(a5),d7
  1234.         andi.w  #$ff,d7
  1235.         
  1236.         move.w  d7,-(sp)
  1237.     move.w    #5,-(sp)
  1238.         move.w  #3,-(sp)
  1239.         trap    #13
  1240.         addq.l  #6,sp
  1241.  
  1242.         bra     bout
  1243.  
  1244.  
  1245. becback:rts
  1246.  
  1247. *************puts my mouse interupt in***************** 
  1248. ***************************************
  1249. oldmouse:    blk.l    1,0
  1250. *************puts my mouse interupt in***************** 
  1251. putrout:move.w  #34,-(sp)
  1252.         trap    #14
  1253.         addq.l  #2,sp
  1254.         move.l  d0,a0
  1255.     move.l    16(a0),oldmouse
  1256.         move.l  #myrout,16(a0)
  1257.         rts
  1258. lastb:        dc.w    -1
  1259. **************my ubeut mouse interupt*******************
  1260. myrout:
  1261.     movem.l    d0-d2/a0-a1,-(sp)
  1262.     moveq    #0,d0    
  1263.     move.b    (a0),d0
  1264.     cmpi.b    #$fa,d0
  1265.     bne    myr1
  1266.     move.w    #1,buttondat
  1267.     bra    myrxy
  1268. myr1:
  1269.     cmpi.b    #$f9,d0
  1270.     bne    myr2
  1271.     move.w    #2,buttondat
  1272.     bra    myrxy
  1273. myr2:
  1274.     cmpi.b    #$fb,d0
  1275.     bne    myr3
  1276.     move.w    #3,buttondat
  1277.     bra    myrxy
  1278. myr3:
  1279.     move.w    #0,buttondat
  1280. myrxy:
  1281.     moveq    #0,d0
  1282.     move.b    1(a0),d0
  1283.     ext.w    d0
  1284.     moveq    #0,d1
  1285.     move.b    2(a0),d1
  1286.     ext.w    d1
  1287. *    lsl.w    #6,d0
  1288. *    lsl.w    #6,d1
  1289.     add.w    d0,mx
  1290.     add.w    d1,my
  1291. myr4:    move.w    mx,d0
  1292.     move.w    my,d1
  1293.     bsr    extra
  1294.     move.w    d0,mx
  1295.     move.w    d1,my
  1296.     movem.l    (sp)+,d0-d2/a0-a1
  1297.     rts
  1298.  
  1299. extra:  cmpi.w    #mminx,d0
  1300.         bge    .S extra1
  1301.         move.w    #mminx,d0
  1302.         bra    .S extra2
  1303. extra1: cmpi.w   #mmaxx,d0
  1304.         ble    .S extra2
  1305.         move.w  #mmaxx,d0
  1306. extra2:    cmpi.w  #mminy,d1
  1307.         bge    .S extra3
  1308.         move.w  #mmaxy,d1
  1309.         bra    extra4
  1310. extra3: cmpi.w   #mmaxy,d1
  1311.         ble    .S extra4
  1312.         move.w  #mminy,d1
  1313. extra4:
  1314.         rts
  1315.  
  1316. buttondat:    dc.w    0
  1317. mx:        dc.w    160
  1318. my:        dc.w    100
  1319.  
  1320. mminx:    equ    16    ;13
  1321. mmaxx:    equ    275
  1322. mminy:    equ    0    ;3
  1323. mmaxy:    equ    255    ; 13 123
  1324. **************my ubeut mouse interupt*******************
  1325.  
  1326.  
  1327. ************code to determine  x offset *****************
  1328. *               and absolute screen address             *
  1329. *               parameters to pass on stack as follows  *
  1330. *               1-      x of sprite                     *
  1331. *               2-      y of sprite                     *
  1332. *               3-      screen address                  *
  1333. *       paremeters returned are x offset in d0          *
  1334. *       absolute screen address in d2                   *
  1335. *********************************************************
  1336. putsp:    
  1337. ************bat********************
  1338. bat:    move.w  mx,pblock
  1339.         move.w  #186,pblock+2
  1340.         move.w  #$e,pblock+4
  1341.         move.w  #$2,pblock+6
  1342.         move.l  #batsp,pblock+8
  1343.         move.l  #battemp,pblock+12
  1344.         move.l  screen,pblock+16
  1345.         move.w  #$2,pblock+26
  1346.         move.l  batadd,pblock+30
  1347.     move.l    #batadd,pblock+34
  1348.     move.w    ynflg,d0
  1349.     tst.w    d0
  1350.     bmi    calc
  1351.  
  1352. clr1:   move.w  pblock+4,d1        ;copy height to d1
  1353.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  1354.         move.l  pblock+12,a0      ;shifted sprite address
  1355. clr2:   move.w  pblock+6,d0        ;copy width to d0
  1356.         move.l  pblock+30,a1       ;absolute screen address to a1
  1357.         move.l  pblock+30,d6
  1358. clr3:   move.l  (a0)+,d3        ;move all four planes
  1359.         eor.l   d3,(a1)+
  1360.         move.l  (a0)+,d3        ;(2 longs = 4 words(planes))
  1361.         eor.l   d3,(a1)+
  1362.         dbf     d0,clr3         ;repeat width times
  1363.         add.l   #160,pblock+30     ;move pointer to next line
  1364.         dbf     d1,clr2         ;repeat height times
  1365.         move.l  d6,pblock+30
  1366.     move.w    ynflg,d0
  1367.     tst.w    d0
  1368.     bge    calc
  1369.     move.l    ptsin,a0
  1370.     move.w    ballx+2,(a0)
  1371.     move.w    bally+2,2(a0)
  1372.     dc.w    getpix
  1373.     cmpi.w    #5,d0
  1374.     ble    calc
  1375.     neg    xvel
  1376.     neg    yvel    
  1377.  
  1378. calc:    move.w    #1,ynflg
  1379.     clr.l   d0
  1380.         move.w  pblock,d0       ;put x value in d0
  1381.         divu    #16,d0          ;divide by 16 leaves word boundry in d0
  1382.         move.w  pblock+2,d1     ;put y value in d1
  1383.         mulu    #160,d1         ;gives offset in words of line
  1384.         move.w  d0,d3
  1385.         mulu    #8,d3
  1386.         add     d3,d1           ;gives word to poke sprite
  1387.         move.l  pblock+16,d2    ;put screen address in d2
  1388.         add     d1,d2           ;gives actual screen address for sprite
  1389.     move.l    pblock+34,a0
  1390.         move.l  d2,(a0)
  1391.         move.l  d2,pblock+20
  1392.         asr.l   #8,d0
  1393.         asr.l   #8,d0           ;leaves x offset in d0          
  1394.         move.w  d0,pblock+24
  1395.  
  1396.  
  1397. *************CODE TO ROTATE A SPRITE IMAGE***********************
  1398. *       parameters to be passed on the stack in order are       *       
  1399. *       1-      x offset from start of word                     *
  1400. *       2-      address of place to put shifted image(tempsp)   *
  1401. *       3-      address of sprite data                          *
  1402. *       4-      height of object in pixels                      *
  1403. *       5-      width of object in words - 1                    *
  1404. *****************************************************************
  1405. shiftimage:
  1406.         move.w  pblock+4,d1        ;height in d1
  1407.         move.w  pblock+24,d2       ;offset to d2
  1408.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  1409.         subq.w  #1,pblock+6        ;width - 1 = width if count starts at zero
  1410.         move.l  pblock+8,a0        ;object pointer to a0
  1411.         move.l  pblock+12,a1       ;image pointer to a1
  1412. si1:    move.w  pblock+6,d0        ;width in d0
  1413.         clr.l   (a1)            ;for each line, the first word of the
  1414.         clr.l   4(a1)           ;image must be cleared
  1415. si0:    clr.l   d4              ;make sure that the top halves of these
  1416.         clr.l   d5              ;registers are zeroed out
  1417.         clr.l   d6
  1418.         clr.l   d7
  1419.         move.w  (a0)+,d4        ;load in one word (four planes)
  1420.         move.w  (a0)+,d5        ;to be rotated
  1421.         move.w  (a0)+,d6
  1422.         move.w  (a0)+,d7
  1423.         ror.l   d2,d4           ;rotate all planes by the offset(d2)
  1424.         ror.l   d2,d5
  1425.         ror.l   d2,d6
  1426.         ror.l   d2,d7
  1427.         or.w    d4,(a1)+        ;add low order bits to the high order bits
  1428.         or.w    d5,(a1)+        ;stored by move instructions farther
  1429.         or.w    d6,(a1)+        ;down in this routine
  1430.         or.w    d7,(a1)+
  1431.         swap    d4              ;move high order bits into lower halves
  1432.         swap    d5              ;of the registers
  1433.         swap    d6
  1434.         swap    d7
  1435.         move.w  d4,(a1)         ;save the high orders bits to be ORed
  1436.         move.w  d5,2(a1)        ;in the loop (do not increment a1 because
  1437.         move.w  d6,4(a1)        ;the ORs in the loop must function on
  1438.         move.w  d7,6(a1)        ;the same addresses as these moves.
  1439.         dbf     d0,si0          ;repeat width times
  1440.         addq.l  #8,a1           ;new line, move to next word( * 4 planes = 8)
  1441.         dbf     d1,si1          ;repeat height times
  1442.         addi.w  #1,pblock+6
  1443.  
  1444. *********code to put sprite on screen********************
  1445. *********parameters to be passed on the stack are********
  1446. *********1-     shifted sprite address (tempsp) *********
  1447. *********2-     absolute screen address to put image*****
  1448. *********3-     height in pixels                *********
  1449. *********4-     width in words -1               *********
  1450.  
  1451. potsp:  move.w  pblock+4,d1     ;copy height to d1
  1452.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  1453.         move.l  pblock+12,a0    ;shifted sprite address
  1454. rs1:    move.w  pblock+26,d0     ;copy width to d0
  1455.         move.l  pblock+20,a1    ;absolute screen address to a1
  1456.         move.l  pblock+20,d6
  1457. rs0:    move.l  (a0)+,d2    ;move all four planes
  1458.         eor.l   d2,(a1)+
  1459.         move.l  (a0)+,d2    ;(2 longs = 4 words(planes))
  1460.         eor.l   d2,(a1)+
  1461.         dbf     d0,rs0          ;repeat width times
  1462.         add.l   #160,pblock+20  ;move pointer to next line
  1463.         dbf     d1,rs1          ;repeat height times
  1464.         move.l  d6,pblock+20
  1465. done:    rts                     ;done
  1466. *********************joy interupt*********************
  1467. getkey:    lea    key,a1
  1468.     move.b    (a1),d0
  1469.     rts
  1470.  
  1471. getjoy1:lea.l   joy1,a1
  1472.         move.b  (a1),d0
  1473.         rts
  1474.  
  1475. getjoy2:lea.l   joy2,a1
  1476.         move.b  (a1),d0
  1477.         rts
  1478.  
  1479.  
  1480.  
  1481.  
  1482. keyset:
  1483. *    pea     mess1
  1484. *       move.w  #1,-(sp)
  1485. *        move.w  #25,-(sp)
  1486. *        trap    #14
  1487. *        addq.l  #8,sp
  1488.  
  1489. *        pea     mess2
  1490. *        move.w  #0,-(sp)
  1491. *        move.w  #25,-(sp)
  1492.  
  1493. *        trap    #14
  1494. *        addq.l  #8,sp
  1495.         
  1496.         move.w  #34,-(sp)
  1497.         trap    #14
  1498.         addq.l  #2,sp
  1499.         move.l  d0,a0
  1500.         lea.l   keyint,a1
  1501.         move.l  a1,32(a0)
  1502.         rts
  1503. even
  1504. mess1:  dc.b    $12,$14
  1505. mess2:  dc.b    $14
  1506.  
  1507.  
  1508. even
  1509. keyint: lea.l   $fffffc00,a1
  1510.         move.b  0(a1),d0
  1511.         btst    #7,d0
  1512.         beq.s   intk4
  1513.         btst    #0,d0
  1514.         bne.s   kriti
  1515.         andi.b  #$20,d0
  1516.         bne.s   kerror
  1517. kriti:  movem.l d2/a0-a4,-(sp)
  1518.         move.b  2(a1),d0
  1519.         lea.l   intwt,a2
  1520.         cmpi.b  #0,(a2)
  1521.         bne.s   keyj7
  1522.         cmpi.b  #$fc,d0
  1523.         bcs.s   keyj
  1524.         lea.l   joystat,a1
  1525.         cmpi.b  #$ff,d0
  1526.         bne.s   intk1
  1527.         move.b  #2,(a1)
  1528. intko:  bra.s   ekraj
  1529. kerror: move.b  2(a1),d0
  1530. intk4:  rts
  1531.  
  1532. ekraj:  movem.l (sp)+,d2/a0-a4
  1533.         and.b   #$20,d2
  1534.         beq.s   ekraj1
  1535.         move.b  2(a1),d0
  1536. ekraj1: rts
  1537.  
  1538. intk1:  cmpi.b  #$fe,d0
  1539.         beq.s   intk2
  1540.         lea.l   intwt,a4
  1541.         subi.b  #$f6,d0
  1542.         and.l   #$ff,d0
  1543.         lea.l   kentlen,a3
  1544.         move.b  0(a3,d0.w),(a4)
  1545.         bra.S   ekraj
  1546. intk2:  move.b  #1,(a1)
  1547.         bra     ekraj
  1548. keyj:   lea.l   intwt,a2
  1549.         cmpi.b  #0,(a2)
  1550.         beq.s   keyj5
  1551. keyj7:  subi.b  #1,(a2)
  1552.         bra     ekraj
  1553. keyj5:  lea.l   joystat,a1
  1554.         btst    #0,(a1)
  1555.         bne.s   jop1
  1556.         btst    #1,(a1)
  1557.         bne.s   jop2
  1558.     lea.l   nkey,a3
  1559.         move.b  d0,(a3)
  1560.         cmpi.b  #$80,d0
  1561.         bcs.s   keji
  1562.         move.b  #0,d0
  1563.         ;
  1564. keji:   lea.l   key,a3
  1565. keyj1:  move.b  d0,(a3)
  1566.         move.b  #0,(a1)
  1567.         bra     ekraj
  1568. jop1:   lea.l   joy1,a3
  1569.         bra.s   keyj1
  1570. jop2:   lea.l   joy2,a3
  1571.         bra.s   keyj1
  1572. scre:   rts
  1573. even
  1574. nkey:   dc.b    0
  1575. key:    dc.b    0
  1576. joy1:   dc.b    0
  1577. joy2:   dc.b    0
  1578. joystat:dc.b    0
  1579. intwt:  dc.b    0
  1580. kentlen:dc.b    7,5,2,2,2,2,6,2,1,1
  1581. bojaflg:dc.b    0
  1582. even
  1583.         dc.b    0,0,0,0,0,0,0,0
  1584. even
  1585. setloc: dc.l    0
  1586. cintno: dc.b    0
  1587. intim:  dc.b    0
  1588.         
  1589.  
  1590. even
  1591.  
  1592.  
  1593. ************get screen address***************
  1594. getscrn:move.w  #2,-(sp)
  1595.         trap    #14
  1596.         addq.l  #2,sp
  1597.         move.l  d0,screen
  1598.         move.l  d0,screen1
  1599. *        move.l  d0,screen2
  1600. *        subi.l  #$8000,screen2
  1601. *    subi.l    #$10000,d0
  1602. *    move.l    d0,screen3
  1603.         rts
  1604.  
  1605.  
  1606.  
  1607. ************change colors****************
  1608. colors: move.l #palette,-(sp)
  1609.         move.w #6,-(sp)
  1610.         trap #14
  1611.         addq.l #6,sp
  1612.         rts
  1613.  
  1614. *****************wait for a key*********************
  1615. wait:   move.w  buttondat,d0
  1616.         tst.w    d0
  1617.         bgt     wback
  1618.         bra     wait
  1619. wback:  rts
  1620. ***************turn mouse off***********************
  1621. mousof: dc.w    $a00a   
  1622.         rts
  1623.  
  1624. ******************get line a params and stuff***************
  1625. linea:  dc.w    $a000
  1626.         move.l  8(a0),intin
  1627.         move.l  12(a0),ptsin
  1628. *       move.w  #0,36(a0)
  1629.         rts
  1630.  
  1631.  
  1632.  
  1633. *********************************************************
  1634. *       a brilliant routine courtesy of janko to        *
  1635. *       insert the vbi addresses in the jump table      *
  1636. *       lea address of routine in a0 do a jsr           *
  1637. *       putvbl and thats it!!!                          *
  1638. *********************************************************
  1639.  
  1640.  
  1641. putvbl: lea     $452,a1
  1642.         move.w  #1,(a1)
  1643.         moveq   #7,d1
  1644.         lea     $456,a1
  1645.         move.l  (a1),a1
  1646. vbl3:   subi.b  #1,d1
  1647.         cmpi.b  #0,d1
  1648.         beq.s   vbl4
  1649.         move.l  (a1)+,d0
  1650.         cmpi.l  #0,d0
  1651.         bne.S   vbl3
  1652.         suba.l  #4,a1
  1653.         move.l  a0,(a1)
  1654. vbl4:   rts
  1655.  
  1656. *********************************************************
  1657. *       my routines for loading in the screens          *
  1658. *       note i use degas format even though I           *
  1659. *       hate the package,due to it's simple format      *
  1660. *       ie: 32l for pallette and straight 32k screen    *
  1661. *       dump                                            *
  1662. *********************************************************
  1663.  
  1664. loadscr:move    #0,-(SP)        ;Open file
  1665.         move.l  #filename,-(SP) ;Address of filename
  1666.         move    #$3D,-(SP)
  1667.         trap    #1              ;Get handle number in D0
  1668.         addq.l  #8,SP
  1669.                 
  1670.         move    D0,-(SP)        ;Save handle
  1671.  
  1672.         move.l  #dummy,-(SP)    ;load pallette into safe area
  1673.         move.l  #34,-(SP)       ;length to read in
  1674.         move    D0,-(SP)        ;Handle
  1675.         move    #$3F,-(SP)      ;bios number
  1676.         trap    #1              ;Read file in
  1677.         add.l   #12,SP
  1678.         move    (sp),d0        
  1679.                
  1680.         move.l  screen2,-(SP)    ;load it straight onto screen
  1681.         move.l  #32000,-(SP)    ;length to read in
  1682.         move    D0,-(SP)        ;Handle
  1683.         move    #$3F,-(SP)      ;bios number
  1684.         trap    #1              ;Read file in
  1685.         add.l   #12,SP
  1686.                 
  1687.         move    #$3E,-(SP)      ;Handle already on stack
  1688.         trap    #1              ;Close file
  1689.         addq.l  #4,SP
  1690.         rts
  1691.  
  1692. ***************************************
  1693. loadtit:move    #0,-(SP)        ;Open file
  1694.         move.l  #titname,-(SP) ;Address of filename
  1695.         move    #$3D,-(SP)
  1696.         trap    #1              ;Get handle number in D0
  1697.         addq.l  #8,SP
  1698.                 
  1699.         move    D0,-(SP)        ;Save handle
  1700.  
  1701.         move.l  #dummy,-(SP)    ;load pallette into safe area
  1702.         move.l  #34,-(SP)       ;length to read in
  1703.         move    D0,-(SP)        ;Handle
  1704.         move    #$3F,-(SP)      ;bios number
  1705.         trap    #1              ;Read file in
  1706.         add.l   #12,SP
  1707.         move    (sp),d0        
  1708.                
  1709.         move.l  screen3,-(SP)    ;load it straight onto screen
  1710.         move.l  #32000,-(SP)    ;length to read in
  1711.         move    D0,-(SP)        ;Handle
  1712.         move    #$3F,-(SP)      ;bios number
  1713.         trap    #1              ;Read file in
  1714.         add.l   #12,SP
  1715.                 
  1716.         move    #$3E,-(SP)      ;Handle already on stack
  1717.         trap    #1              ;Close file
  1718.         addq.l  #4,SP
  1719.         rts
  1720.  
  1721. *******************blocks for rotated sprites*************
  1722. tempsp: blk.w   500
  1723. onscreen:       blk.l   1
  1724. pblock: blk.l   40
  1725. block:    blk.l    40
  1726. ghosttemp:    blk.w    500
  1727. ghostad:blk.l    1
  1728. gynflg:    blk.w    1
  1729. gblock:    blk.l    40
  1730. ghostx:    blk.w    1
  1731. ghosty:    blk.w    1
  1732. safe:    blk.l    1
  1733. current:blk.w    1
  1734. goutflg:blk.w    1
  1735. keysav:    blk.l    1
  1736. kkk:    blk.l    1
  1737. plev:    blk.w    1
  1738. pdelay:    blk.w    1
  1739. count:    blk.w    1
  1740. catches:blk.w    1
  1741. fast:    blk.w    1
  1742. score:    blk.w    1
  1743. bound:    blk.w    1
  1744. brtimes:blk.w    1
  1745. which:    blk.l    1
  1746. bad:    blk.l    1
  1747. bad2:    blk.l    1
  1748. balldo:    blk.w    1
  1749. dir:    blk.w   1
  1750. tmx:    blk.w   1
  1751. nrem:    blk.w    1
  1752. nbrks:    blk.w    1
  1753. bynflg:    blk.w    1
  1754. bdel:   blk.w   1
  1755. screen: blk.l   1
  1756. ynflg:  blk.w   1
  1757. batadd: blk.l   1
  1758. *screen2:blk.l   1
  1759. screen1:blk.l   1
  1760. *screen3:blk.l    1
  1761. clrbr:    blk.w    50,0
  1762. dummy:  blk.l   32
  1763. xvel:    blk.w    1
  1764. yvel:    blk.w    1
  1765. thbrick:blk.w    1
  1766. brick:    blk.w    1
  1767. lev:    blk.w    1
  1768. bbx:    blk.w    1
  1769. bby:    blk.w    1
  1770. filename:       dc.b    'brkmain.pi1',0  
  1771. titname:    dc.b    'brktitle.pi1',0
  1772. even
  1773. tempad: blk.l   1       
  1774. line:   blk.b   10
  1775. pos:    dc.b    27,89,32,38,0
  1776. col:    dc.b    27,98,15,0
  1777. spos:    dc.b    27,89,32,51,0
  1778. bpos:    dc.b    27,89,32,69,0
  1779. even
  1780. oldshad:blk.l   1
  1781. bitoffs:blk.w   1
  1782. tempsh: blk.l   1
  1783. whsp:   blk.w   1
  1784. first:  blk.w   1
  1785. intin:  blk.l   1
  1786. ptsin:  blk.l   1
  1787. putpix: equ     $a001
  1788. getpix: equ     $a002
  1789. lastx:  blk.w   1
  1790. lasty:  blk.w   1
  1791. area:    blk.w    200
  1792. balltemp:    blk.w    500
  1793. battemp:blk.w    500
  1794. ballx:    blk.w    1
  1795. bally:    blk.w    1
  1796. ballad:    blk.l    1
  1797. outflg:    blk.w    1
  1798. even
  1799. *  Hardware color pallet  (color 0 to 15):
  1800. *
  1801. boomcol:dc.w    $0106,$0205,$0304,$0403,$0502,$0601,$0700,$0601
  1802.     dc.w    $0502,$0403,$0304,$0205,$0106,$0007
  1803. palette:dc.w    $0007,$0005,$0501,$0056,$0045,$0034,$0410,$0520
  1804.     dc.w    $0630,$0030,$0250,$0070,$0700,$0224,$0455,$0777
  1805.  
  1806.  
  1807. batsp:    dc.w    $007F,$007F,$3F80,$3FFF,$F000,$F000,$0FE0,$FFE0
  1808.     dc.w    $00FF,$00FF,$7F00,$7FFF,$F800,$F800,$07F0,$FFF0
  1809.     dc.w    $3EFF,$3EFF,$C100,$FFFF,$FBE0,$FBE0,$0418,$FFF8
  1810.     dc.w    $1EFF,$7EFF,$8100,$FFFF,$FBC0,$FBF0,$0408,$FFF8
  1811.     dc.w    $8000,$7EFF,$0100,$FFFF,$0008,$FBF0,$0400,$FFF8
  1812.     dc.w    $C000,$3EFF,$0100,$FFFF,$0018,$FBE0,$0400,$FFF8
  1813.     dc.w    $7EFF,$0100,$0100,$7EFF,$FBF0,$0400,$0400,$FBF0
  1814.     dc.w    $3EFF,$0100,$0100,$3EFF,$FBF0,$0400,$0400,$FBE0
  1815.     dc.w    $0FFF,$0000,$0000,$0000,$FFF8,$0000,$0000,$0000
  1816.     dc.w    $1FFF,$0000,$0000,$0000,$FFFC,$0000,$0000,$0000
  1817.     dc.w    $1FFF,$0000,$0000,$0000,$FFFC,$0000,$0000,$0000
  1818.     dc.w    $1FFF,$0000,$0000,$0000,$FFFC,$0000,$0000,$0000
  1819.     dc.w    $0FFF,$0000,$0000,$0000,$FFF8,$0000,$0000,$0000
  1820.     dc.w    $07FF,$0000,$0000,$0000,$FFF0,$0000,$0000,$0000
  1821.  
  1822.  
  1823. ballsp:    dc.w    $6000,$6000,$6000,$1000,$5000,$D000,$D000,$3800
  1824.     dc.w    $4400,$C000,$C000,$3800,$7E00,$F800,$F800,$0000
  1825.     dc.w    $0E00,$7000,$7000,$0000,$3E00,$0000,$0000,$0000
  1826.     dc.w    $1C00,$0000,$0000,$0000
  1827.  
  1828. ghostbr:dc.w    $7FFF,$FFFF,$0000,$FFFF,$8001,$0001,$0000,$8001
  1829.     dc.w    $8001,$1EF1,$0000,$9EF1,$8001,$0281,$0000,$8281
  1830.     dc.w    $8001,$1EF1,$0000,$9EF1,$8001,$1011,$0000,$9011
  1831.     dc.w    $8001,$1EF1,$0000,$9EF1,$FFFE,$0001,$0000,$FFFF
  1832.  
  1833.  
  1834.  
  1835. bricks:    dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1836.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1837.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1838.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$FFFE,$0001,$FFFF,$FFFF
  1839.     dc.w    $0000,$FFFF,$0000,$0000,$0000,$FFFF,$0000,$0000
  1840.     dc.w    $1FF8,$E007,$1FF8,$1FF8,$200C,$FFF3,$3FFC,$3FFC
  1841.     dc.w    $3004,$FFFB,$3FFC,$3FFC,$1FF8,$FFFF,$1FF8,$1FF8
  1842.     dc.w    $0000,$FFFF,$0000,$0000,$0000,$FFFF,$0000,$0000
  1843.     dc.w    $FFFF,$FFFF,$FFFF,$FFFF,$C001,$FFFF,$FFFF,$FFFF
  1844.     dc.w    $8001,$FFFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1845.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1846.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$FFFE,$0001,$FFFF,$FFFF
  1847.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$B001,$7FFF,$FFFF,$FFFF
  1848.     dc.w    $E001,$7FFF,$FFFF,$FFFF,$C001,$FFFF,$FFFF,$FFFF
  1849.     dc.w    $8001,$FFFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1850.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$FFFE,$0001,$FFFF,$FFFF
  1851.     dc.w    $FFFF,$FFFF,$FFFF,$FFFF,$8601,$7FFF,$FFFF,$FFFF
  1852.     dc.w    $8C01,$7FFF,$FFFF,$FFFF,$9801,$7FFF,$FFFF,$FFFF
  1853.     dc.w    $B001,$7FFF,$FFFF,$FFFF,$E001,$7FFF,$FFFF,$FFFF
  1854.     dc.w    $C001,$FFFF,$FFFF,$FFFF,$FFFE,$8001,$FFFF,$FFFF
  1855.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$80C1,$7FFF,$FFFF,$FFFF
  1856.     dc.w    $8181,$7FFF,$FFFF,$FFFF,$8301,$7FFF,$FFFF,$FFFF
  1857.     dc.w    $8601,$7FFF,$FFFF,$FFFF,$8C01,$7FFF,$FFFF,$FFFF
  1858.     dc.w    $9801,$7FFF,$FFFF,$FFFF,$FFFE,$3001,$FFFF,$FFFF
  1859.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$8019,$7FFF,$FFFF,$FFFF
  1860.     dc.w    $8031,$7FFF,$FFFF,$FFFF,$8061,$7FFF,$FFFF,$FFFF
  1861.     dc.w    $80C1,$7FFF,$FFFF,$FFFF,$8181,$7FFF,$FFFF,$FFFF
  1862.     dc.w    $8301,$7FFF,$FFFF,$FFFF,$FFFE,$0601,$FFFF,$FFFF
  1863.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$8003,$7FFF,$FFFF,$FFFF
  1864.     dc.w    $8007,$7FFF,$FFFF,$FFFF,$800D,$7FFF,$FFFF,$FFFF
  1865.     dc.w    $8019,$7FFF,$FFFF,$FFFF,$8031,$7FFF,$FFFF,$FFFF
  1866.     dc.w    $8061,$7FFF,$FFFF,$FFFF,$FFFE,$00C1,$FFFF,$FFFF
  1867.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1868.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1869.     dc.w    $8003,$7FFF,$FFFF,$FFFF,$8007,$7FFF,$FFFF,$FFFF
  1870.     dc.w    $800D,$7FFF,$FFFF,$FFFF,$FFFE,$0019,$FFFF,$FFFF
  1871.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1872.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1873.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1874.     dc.w    $8003,$7FFF,$FFFF,$FFFF,$FFFF,$0007,$FFFF,$FFFF
  1875.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1876.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1877.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1878.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$FFFE,$0001,$FFFF,$FFFF
  1879.  
  1880.  
  1881.  
  1882.  
  1883. redcol:    dc.w    $0700,$0600,$0500,$0400,$0300,$0200,$0100
  1884.     dc.w    $0200,$0300,$0400,$0500,$0600
  1885.  
  1886.  
  1887.  
  1888. *****opening
  1889. lev1:    dc.w    $0224,$0455,79,0
  1890.     dc.w    37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52
  1891.     dc.w    91,92,93,94,95,96,97,98,99,100,101,102,103,104,105
  1892.     dc.w    106,145,146,147,148,149,150,151,152,153,154,155
  1893.     dc.w    156,157,158,159,160,199,200,201,202,203,204,205
  1894.     dc.w    206,207,208,209,210,211,212,213,214,253,254,255
  1895.     dc.w    256,257,258,259,260,261,262,263,264,265,266,267,268
  1896. **opening double
  1897. lev2:    dc.w    $0035,$0057,79,64
  1898.     dc.w    37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52
  1899.     dc.w    91,92,93,94,95,96,97,98,99,100,101,102,103,104,105
  1900.     dc.w    106,145,146,147,148,149,150,151,152,153,154,155
  1901.     dc.w    156,157,158,159,160,199,200,201,202,203,204,205
  1902.     dc.w    206,207,208,209,210,211,212,213,214,253,254,255
  1903.     dc.w    256,257,258,259,260,261,262,263,264,265,266,267,268
  1904. ***alternate
  1905. lev3:    dc.w    $0331,$0657,83,64
  1906.     dc.w    36,37,53,90,161,198
  1907.     dc.w    38,39,40,41,42,43,44,45,46,47,48,49,50,51,92,93,94,95
  1908.     dc.w    96,97,98,99,100,101,102,103,104,105,106,107,
  1909.     dc.w    144,145,146,147,148,149,150,151,152,153,154,155,156
  1910.     dc.w    157,158,159,200,201,202,203,204,205,206,207,208,209
  1911.     dc.w    210,211,212,213,214,215,252,253,254,255,256
  1912.     dc.w    257,258,259,260,261,262,263,264,265,266,267
  1913. *plus
  1914. lev4:    dc.w    $0030,$0060,37,0
  1915.     dc.w    44,45,62,63,80,81,98,99,116,117,134,135,152,153
  1916.     dc.w    170,171,188,189,206,207,224,225,242,243,260,261    
  1917.     dc.w    146,147,148,149,150,151,154,155,156,157,158,159
  1918. **arch
  1919. lev5:    dc.w    $0405,$0757,83,64
  1920.     dc.w    38,39,51,52,56,57,58,59,60,61,62,63,64,65,66,67,68
  1921.     dc.w    69,70,74,75,92,93,110,111,128,129,146,147,164,165
  1922.     dc.w    182,183,200,201,218,219,236,237,254,255,87,88,105
  1923.     dc.w    106,123,124,141,142,159,160,177,178,195,196,213,214
  1924.     dc.w    231,232,249,250,267,268,132,133,134,135,136,137,138
  1925.     dc.w    150,151,152,153,154,155,156,168,169,170,171,172,173,174
  1926.  
  1927. ******lots
  1928. lev9:    dc.w    $0224,$0455,165,0,36
  1929.     dc.w    37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,57,58
  1930.     dc.w    59,60,61,62,63,64,65,66,67,68,75,76,77,78,79,80,81,82
  1931.     dc.w    83,84,85,86,90,91,92,93,94,95,96,97,98,99,100
  1932.     dc.w    101,102,103,104,105,106,107,113,114,115,116,117,118
  1933.     dc.w    119,120,132,133,134,135,136,137,144,145,146,147,148
  1934.     dc.w    149,150,151,152,153,154,155,156,157,158,159,160,161
  1935.     dc.w    168,169,170,171,172,173,185,186,187,188,189,190,191
  1936.     dc.w    192,198,199,200,201,202,203,204,205,206,207,208,209
  1937.     dc.w    210,211,212,213,214,215,219,220,221,222,223,224,225
  1938.     dc.w    226,227,228,229,230,237,238,239,240,241,242,243,244
  1939.     dc.w    245,246,247,248,252,253,254,255,256,257,258,259,260
  1940.     dc.w    261,262,263,264,265,266,267,268,269
  1941.  
  1942. ***AM
  1943. lev10:    dc.w    $0035,$0057,122,0    
  1944.     dc.w    40,41,42,43,44,45,51,57,58,59,60,61,62,63,64,68,69
  1945.     dc.w    75,76,77,78,79,80,81,82,83,85,86,87,93,94,97,98,99,100
  1946.     dc.w    101,102,103,104,105,111,112,115,116,117,118,119,120
  1947.     dc.w    121,122,123,129,130,133,134,135,136,137,138,139,140
  1948.     dc.w    141,147,148,149,150,151,152,153,154,156,158,159,165
  1949.     dc.w    166,167,168,169,170,171,172,176,177,183,184,187,188
  1950.     dc.w    189,190,194,195,201,202,205,206,207,208,212,213,219
  1951.     dc.w    220,223,224,225,226,230,231,237,238,241,242,243,244
  1952.     dc.w    248,249,255,256,259,260,261,262,266,267
  1953. ***TB
  1954. lev11:    dc.w    $0331,$0651,52,64
  1955.     dc.w    76,77,78,79,80,81,82,83,84,85,96,114,132,150,168,186
  1956.     dc.w    204,205,222,223,240,241,258,259,99,117,135,153,154
  1957.     dc.w    171,172,173,174,189,207,225,226,243,244,261,262,263,264
  1958.     dc.w    103,121,139,157,175,193,211,229,247,265
  1959. *atari***
  1960. lev12:    dc.w    $0030,$0060,67,64
  1961.     dc.w    92,105,42,60,78,96,114,132,150,168,186,204,185
  1962.     dc.w    202,203,220,221,237,238,254,255,256,44,45,62
  1963.     dc.w    63,80,81,98,99,116,117,134,135,152,153,170,171
  1964.     dc.w    188,189,206,207,224,225,242,243,260,261,47,65,83,101
  1965.     dc.w    119,137,155,173,191,209,192,210,211,228,229,247,248,265
  1966.     dc.w    266,267
  1967.  
  1968. lev13:    dc.w    $0405,$0707,86,64
  1969.     dc.w    58,59,60,61,62,63,64,65,66,67,76,85,94,96,97,98,99
  1970.     dc.w    100,101,102,103,112,121,130,131,132,133,134,135,136
  1971.     dc.w    137,139,148,157,166,168,169,170,171,172,173,174,175
  1972.     dc.w    184,193,202,203,204,205,206,207,208,209,211,220,229
  1973.     dc.w    238,239,240,241,242,243,244,245,246,247,256,265,274
  1974.     dc.w    275,276,277,278,279,280,281,283,288,289,290,291,292
  1975.     dc.w    301,302,303,304,305
  1976.  
  1977. lev14:    dc.w    $0035,$0057,69,64
  1978.     dc.w    292,300,303,290,297,298
  1979.     dc.w    293,294,295,296,299,301,302,291,252,253,254,255
  1980.     dc.w    256,257,258,259,262,263,264,265,266,267,268,269,221
  1981.     dc.w    222,223,224,225,226,227,228,180,181,182,183,184,185
  1982.     dc.w    186,187,190,191,192,193,194,195,196,197,25,43,61,79
  1983.     dc.w    97,115,133,151,28,46,64,82,100,118,136,154    
  1984. lev15:    dc.w    $0244,$0355,10,0
  1985.     dc.w    18,19,20,21,22,23,24,25,26,27,28
  1986.  
  1987. pattern:
  1988.     dc.l    lev1,lev2,lev3,lev4,lev5,lev9
  1989.     dc.l    lev10,lev11,lev12,lev13,lev14
  1990.  
  1991.  
  1992. adds:    dc.w    2568,2576,2584,2592,2600,2608,2616,2624,2632,2640
  1993.     dc.w    2648,2656,2664,2672,2680,2688,2696,2704
  1994.     dc.w    3848,3856,3864,3872,3880,3888,3896,3904,3912,3920
  1995.     dc.w    3928,3936,3944,3952,3960,3968,3976,3984
  1996.     dc.w    5128,5136,5144,5152,5160,5168,5176,5184,5192,5200
  1997.     dc.w    5208,5216,5224,5232,5240,5248,5256,5264
  1998.     dc.w    6408,6416,6424,6432,6440,6448,6456,6464,6472,6480
  1999.     dc.w    6488,6496,6504,6512,6520,6528,6536,6544
  2000.     dc.w    7688,7696,7704,7712,7720,7728,7736,7744,7752,7760
  2001.     dc.w    7768,7776,7784,7792,7800,7808,7816,7824
  2002.     dc.w    8968,8976,8984,8992,9000,9008,9016,9024,9032,9040
  2003.     dc.w    9048,9056,9064,9072,9080,9088,9096,9104
  2004.     dc.w    10248,10256,10264,10272,10280,10288,10296,10304,10312
  2005.     dc.w    10320,10328,10336,10344,10352,10360,10368,10376,10384
  2006.     dc.w    11528,11536,11544,11552,11560,11568,11576,11584,11592
  2007.     dc.w    11600,11608,11616,11624,11632,11640,11648,11656,11664
  2008.     dc.w    12808,12816,12824,12832,12840,12848,12856,12864,12872
  2009.     dc.w    12880,12888,12896,12904,12912,12920,12928,12936,12944
  2010.     dc.w    14088,14096,14104,14112,14120,14128,14136,14144,14152
  2011.     dc.w    14160,14168,14176,14184,14192,14200,14208,14216,14224
  2012.     dc.w    15368,15376,15384,15392,15400,15408,15416,15424,15432
  2013.     dc.w    15440,15448,15456,15464,15472,15480,15488,15496,15504
  2014.     dc.w    16648,16656,16664,16672,16680,16688,16696,16704,16712
  2015.     dc.w    16720,16728,16736,16744,16752,16760,16768,16776,16784
  2016.     dc.w    17928,17936,17944,17952,17960,17968,17976,17984,17992
  2017.     dc.w    18000,18008,18016,18024,18032,18040,18048,18056,18064
  2018.     dc.w    19208,19216,19224,19232,19240,19248,19256,19264,19272
  2019.     dc.w    19280,19288,19296,19304,19312,19320,19328,19336,19344
  2020.     dc.w    20488,20496,20504,20512,20520,20528,20536,20544,20552
  2021.     dc.w    20560,20568,20576,20584,20592,20600,20608,20616,20624
  2022.     dc.w    21768,21776,21784,21792,21800,21808,21816,21824,21832
  2023.     dc.w    21840,21848,21856,21864,21872,21880,21888,21896,21904
  2024.     dc.w    23048,23056,23064,23072,23080,23088,23096,23104,23112
  2025.     dc.w    23120,23128,23136,23144,23152,23160,23168,23176,23184
  2026. even
  2027. hitbat:    dc.b    0,0,1,0,2,0,3,0,4,0,5,1,6,0,7,$3b,8,$10,9,$10,10,$10
  2028.     dc.b    11,0,12,$10,13,9
  2029.     dc.b    $80,2,$81,4,$40,1,$82,0,0
  2030. hitbr:    dc.b    0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,$3e,8,$10,9,$10,10,$10
  2031.     dc.b    11,0,12,$10,13,9
  2032.     dc.b    $80,$20,$81,0,$40,1,$82,0,0
  2033. hitbr2:    dc.b    0,0,1,0,2,$20,3,0,4,0,5,1,6,0,7,$3c,8,$10,9,$10,10,$10
  2034.     dc.b    11,0,12,$10,13,0
  2035.     dc.b    $80,2,$81,0,$40,1,$82,0,0
  2036. boom:    dc.b    0,0,1,$f,2,0,3,0,4,0,5,1,6,$1f,7,$2e,8,$10,9,$10,10,$0
  2037.     dc.b    11,0,12,$80,13,9,$82,0
  2038.  
  2039. even
  2040.  
  2041. sc3:
  2042.     blk.b    128,0
  2043. screen3:
  2044.     blk.b    32000,0
  2045.  
  2046. sc2:
  2047.     blk.b    128,0
  2048. screen2:
  2049.     blk.b    32000,0
  2050.  
  2051.  
  2052.  
  2053. ə